package cn.edu.scau.cmi.suwenpeng.chapter10;

import java.io.*;

import java.util.*;

@SuppressWarnings("unused")
public class TestRaf {

	public static void main(String[] args) throws IOException {
		 @SuppressWarnings("resource")

		 RandomAccessFile rf = null;
		    try {
		      rf = new RandomAccessFile("C:\\Users\\小苏\\git\\201727010314_su_wenpeng\\score.txt", "r");
		      long len = rf.length();   //文件长度
		     
		      System.out.println("文件开始指针为"+0);
		      long nextend =  len - 1;  //指针是从0到length-1
		      String line=null;
		      rf.seek(nextend); //seek到最后一个字符
		      int c = -1;
		      char[] array;
		      while (nextend >= 0) {
		        c = rf.read();
		        if (c == '\n') //只有行与行之间才有\r\n，这表示读到每一行上一行的末尾的\n，而执行完read后，
		        	            //指针指到了这一行的开头字符
		        {
		          line =  new String(rf.readLine().getBytes("ISO-8859-1"), "gbk");
		          //RandomAccessFile的readLine方法读取文本为ISO-8859-1，需要转化为windows默认编码gbk
//		          System.out.println(line);
		          //nextend--;
		          array=line.toCharArray();
		          for(int i=array.length-1;i>=0;i--) {
		        	  System.out.print(array[i]);
		          }
		          System.out.println();
		          
		        }
		        rf.seek(nextend);//这一句必须在这个位置，如果在nextend--后，那么导致进0循环后去seek-1索引，报异常
		                         //如果在read()以前，那么导致进入0循环时，因为read指针到1，第一行少读取一个字符
		        if (nextend == 0) {// 当文件指针退至文件开始处，输出第一行
		        //  System.out.println(new String(rf.readLine().getBytes("ISO-8859-1"), "gbk"));
		        	line =  new String(rf.readLine().getBytes("ISO-8859-1"), "gbk");
			          array=line.toCharArray();
			          for(int i=array.length-1;i>=0;i--) {
			        	  System.out.print(array[i]);
			          }
			          System.out.println();
		        }
		        nextend--;
		        
		      }
		    } catch (FileNotFoundException e) {
		      e.printStackTrace();
		    } catch (IOException e) {
		      e.printStackTrace();
		    } finally {
		      try {
		        if (rf != null)
		          rf.close();
		      } catch (IOException e) {
		        e.printStackTrace();
		      }
		    }

	}

}
